import time
import jwt
import requests


ak = ""  # 填写access key
sk = ""  # 填写secret key

negative_prompt = (
    "不能出现超现实的动物：确保生成的动物看起来真实，没有超自然或幻想的特征。"
    "不能出现动漫风格的动物：确保生成的动物具有真实的外貌，不带有卡通或动漫风格."
    "不能出现多余的肢体：确保生成的动物没有额外的肢体或不合理的身体部位。"
    "不能出现缺失的肢体：确保生成的动物具备完整的身体部位，没有肢体缺失。"
    "不能出现动作僵硬和瘫软：确保生成的动物动作自然流畅，没有僵硬或瘫软的表现。"
    "不能出现低品质的画面：确保生成的视频画质清晰，没有模糊或低分辨率的问题。"
    "不能出现恐怖、危险、可怕的画面：确保生成的视频内容安全、友好，不包含任何令人不安的元素。"
    "不能出现不真实的环境背景：确保动物所处的环境背景真实可信，没有不合理的场景。"
    "不能出现不自然的光线和阴影：确保视频中的光线和阴影自然，没有明显的合成痕迹。"
    "不能出现不协调的色彩：确保视频中的色彩搭配和谐，没有刺眼或不自然的颜色。"
    "不能出现人为的痕迹：确保生成的动物视频没有明显的后期处理或人为干预的痕迹。"
    "不能出现不真实的动物行为：确保动物的行为符合其物种的特征，不出现不合逻辑的举动。"
    "不能出现多余的背景元素：确保视频背景简洁，没有多余的干扰元素。"
    "不能出现低质量的音效：确保视频中的音效清晰，没有噪音或低品质的音效。"
    "不能出现不连贯的镜头转换：确保视频中的镜头切换自然流畅，没有突兀的切换。"
)

# 生成token
def encode_jwt_token(ak, sk):
    headers = {
        "alg": "HS256",
        "typ": "JWT"
    }
    payload = {
        "iss": ak,
        "exp": time.time() + 1800,  # 有效时间，此处示例代表当前时间+1800s(30min)
        "nbf": time.time() - 5  # 开始生效的时间，此处示例代表当前时间-5秒
    }
    token = jwt.encode(payload, sk, headers=headers)
    print(token)
    return token

# 生成视频，并且拿到视频的task_id
def generateVideo(prompt):
    token = encode_jwt_token(ak, sk)
    url = 'https://api.klingai.com/v1/videos/image2video'  # 请求地址
    headers = {
        'Authorization': 'Bearer ' + token,  # 注意Bearer跟token之间有空格
        'Content-Type': 'application/json'
    }
    data = {
        "model_name": "kling-v1-6",
        "mode": "pro",
        "duration": "5",
        "image": "https://pic.rmb.bdstatic.com/bjh/240305/events/cb17e14f41d375ae9fe9abf6cb1a9cbe6858.jpeg",  # 确保这是一个直接的图片URL
        "prompt": prompt,  # 正向提示词
        "negative_prompt": negative_prompt,  # 反向提示词
        "cfg_scale": 0.2,  # 生成视频的自由度；值越大，模型自由度越小，与用户输入的提示词相关性越强
    }
    response = requests.post(url, headers=headers, json=data)
    result = response.json()
    print(result)
    task_id = result['data']['task_id']
    return task_id



# 根据视频的task_id，获取视频的url
def getVideoUrl(prompt):
    task_id = generateVideo(prompt)
    # task_id = 'CmBhnmePZ8YAAAAAAHwi2w'
    token = encode_jwt_token(ak, sk)
    headers = {
        'Authorization': 'Bearer ' + token,  # 注意Bearer跟token之间有空格
        'Content-Type': 'application/json'
    }
    # 构建 URL
    url = f'https://api.klingai.com/v1/videos/image2video/{task_id}'
    response = requests.get(url, headers=headers)
    result = response.json()
    print(result)
    videoUrl = result['data']['task_result']['videos'][0]['url']
    return videoUrl


